import utilClass.ListNode;

/**
 * 725. 分隔链表
 * 给你一个头结点为 head 的单链表和一个整数 k ，请你设计一个算法将链表分隔为 k 个连续的部分。
 *
 * 每部分的长度应该尽可能的相等：任意两部分的长度差距不能超过 1 。这可能会导致有些部分为 null 。
 *
 * 这 k 个部分应该按照在链表中出现的顺序排列，并且排在前面的部分的长度应该大于或等于排在后面的长度。
 *
 * 返回一个由上述 k 部分组成的数组。
 *
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode-cn.com/problems/split-linked-list-in-parts
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 */
public class SpritList {


    public static ListNode[] cutting(ListNode node,int k){
        int n=0;
        ListNode temp=node;
        while(temp!=null){
            n++;
            temp=temp.next;
        }
        int count=n/k;
        int remainder=n%k;
        ListNode[] nodes=new ListNode[k];
        ListNode curr=node;
        for (int i = 0; i <k&&curr!=null ; i++) {
            nodes[i]=curr;
            int pageSize=count+(i<remainder?1:0);
            for (int j = 1; j <pageSize ; j++) {
                curr=curr.next;
            }
            ListNode next=curr.next;
            curr.next=null;
            curr=next;
        }
        return nodes;
    }

    public static void main(String[] args) {
        int[] array=new int[]{1,2,3};
        ListNode node=new ListNode();
        ListNode child=node;
        for (int i = 0; i <array.length ; i++) {
            ListNode newnode=new ListNode(array[i]);
            child.next=newnode;
            child=newnode;

        }
        cutting(node.next,5);

    }
}
